/// @page page_assert Custom Assertion Failure Behaviour
/// First of all, there is a need to define a custom assertion failure report
/// class which inherits from nil::marshalling::assert_type and overrides pure virtual member
/// function fail():
/// @code
/// #include <nil/marshalling/marshalling.hpp>
/// class MyAssert : public nil::marshalling::assert_type
/// {
/// public:
///     MyAssert(...) {...} // The constructor may receive any parameters needed
/// protected:
///     virtual void fail(
///         const char* expr,
///         const char* file,
///         unsigned int line,
///         const char* function) override
///     {
///         ... // Do the failure report
///     }
/// private:
///     ... // Any data members
/// }
/// @endcode
/// The second stage is to enable/register the the custom assertion failure behaviour:
/// @code
/// int main(int argc, const char* argv[])
/// {
///     nil::marshalling::enable_assert<MyAssert> enabledAssert;
///     // From this point custom assertion failure bahaviour takes place.   
///     ...
/// }
/// @endcode
/// It is also possible to override custom assertion failure behavior several times:
/// @code
/// int main(int argc, const char* argv[])
/// {
///     nil::marshalling::enable_assert<MyAssert> assert1;
///     // From this point custom assertion failure bahaviour takes place.   
///     ...
///     { 
///          nil::marshalling::enable_assert<SomeOtherMyAssert> assert2;
///         // From this point different custom assertion failure bahaviour 
///         // defined in SomeOtherMyAssert class takes place.    
///         ...
///     } // assert2 is out of scope, the custom assertion failure behavior
///       // registered with assert1 is restored.
///     ...
/// }
/// @endcode
